iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
Software Development

溫柔學姐的Kotlin補課/教學系列 第 11

結識班代:四則運算子函式多載 Arithmetic Operators Function Overloading

  • 分享至 

  • xImage
  •  

本校剛入學的新生,一般來說,會分配一個相同科系的室友,和兩個其他科系的新生。

詩憶就是那個例外。

她錯過新生登記宿舍的時間,雖然後來候補成功,但是宿舍和同科系的新生分開,室友也是其他科系的學姐。

好處是不用擔心系上發現學姐幫她補課,但壞處很明顯,就是很難打入系上的圈子。

這點尤其在上午課程,其他人三三兩兩踏進教室的時候特別明顯。

再加上教室內的男女差距比例,她乾脆就放棄和其他學生打招呼,專心上課,畢竟要補進度的不是只有學姐那門課。

沒想到中間休息的時候,坐在後面的短髮女生突然伸手戳她和她說話。「妳需要考古題嗎?」

詩憶認出了對方是班代方綺巧,急忙回應:「喔,要的,謝謝。」

「其他人都來領了,只有妳沒有,我還以為妳有其他打算呢。」方綺巧給出考古題後沒有馬上結束對話,繼續和詩憶攀談。

「我忙忘了。」詩憶臉微紅。這是實話,光是補進度就時間不夠用了。

「妳也有選修Kotlin程式設計吧?妳對函式那章熟不熟?」方綺巧直接坐到詩憶旁邊的空位,把講義上的內容拿給她看。

fun main() {
    println(add(1, 3))
}
fun add(number1: Int, number2: Int): Int {
    return number1 + number2
}

「我知道傳入13的參數後結果會印出4。」綺巧說。

詩憶點點頭,學姐和她說過,從函式括號裡傳入的都稱為參數,參考的『參』,英文是parameter

fun add(number1: Int, number2: Int): String {
    return "v" + number1 + number2
}

「可是我試過,這個印出的不是v4而是v13⋯⋯而我如果把"v"放到中間或是最後,程式連跑都不能跑。」

fun add(number1: Int, number2: Int): String {
    return number1 + number2 + "v"
}
fun add(number1: Int, number2: Int): String {
    return number1 + "v" + number2
}

「嗯?」詩憶覺得這好像超出了函式的範圍?

目前她學到的內容,就是具名函式function要用簡稱fun開頭,後面接著函式名字,函式參數要註明類別但不能加上valvar,如果需要用到函式的處理結果,就要用return回傳,否則只會印出kotlin.Unit這個類別名字。然後回傳時要註明回傳類別,其中註明Unit和沒註明是一樣的意義。最後,大括號裡是函式處理的內容,也是參數的生存空間。

她很確定學姐沒提到加這個"v"的順序影響。

「抱歉,這個我也不懂。不過我可以幫妳問一個懂的人。」詩憶撥通唯心的電話。

唯心聽完了詩憶的描述,回答道:「首先,程式和數學一樣,是從上到下、左到右的順序處理。所以她寫的函式執行順序是字串"v"先加上數字1變成字串"v1",然後再加入下一個數字3變成字串"v13"。如果那位同學想要"v4"的結果,可以把數字計算的地方用括號包起來。」

fun add(number1: Int, number2: Int): String {
    return  "v" + (number1 + number2)
}

「其次,+其實是plus函式的簡寫,在各種類別裡實現的方式不同。簡單點說,就是類別有實現字串.plus(數字)字串.plus(字串),但沒有實現數字.plus(字串)。像這樣同個名字的函式擁有不同的參數,是Kotlin函式多載Function Overloading的特性。」

詩憶復述唯心的話給綺巧,把傳過來的四則運算子對照函式圖也拿給她看。

圖1

綺巧看著圖片幾秒後,立刻拿出手機要和詩憶交換聯絡方式。「原來妳認識這麼厲害的人,以後我們就是好朋友了,其他科目的考古題我有拿到就會給妳一份,再有程式問題我就找妳幫忙啦。」

詩憶看著突然變得非常熱情、氣勢逼人的綺巧,下意識地吞了吞口水,乖乖加了通訊軟體好友。


上一篇
週末雨會(四):自定義資料類別 Defined Data Class
下一篇
實作四則運算:條件式 when else
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言